package com.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.bean.GradeBean;
import com.project.bean.RoleBean;
import com.project.bean.UserBean;

import java.util.List;

public interface IUserService {
    /**
     * 用户登录
     * 需要查询其中的权限集合
     * 离职用户不能登录
     * @param username  用户名
     * @param password  密码
     * @return  用户对象
     */
    UserBean login(String username, String password);


    /**
     * 动态分页查询用户
     * @param pageNO    页码
     * @param username  用户名称
     * @return  分页对象
     */
    IPage<UserBean> findUserByItem(Integer pageNO,String username);

    /**
     * 查询用户---添加用户时，用户名不能重复
     * @param username  用户名
     * @return  用户对象
     */
    UserBean findUserByUserName(String username);

    /**
     * 查询所有的角色
     * @return  角色集合
     */
    List<GradeBean> findAll();

    /**
     * 查询角色的权限--根据角色集合id
     * @param roleIds  角色Id数组
     * @return  权限集合
     */
    List<GradeBean> findByRoleIds(Integer[] roleIds);

    /**
     * 添加用户
     * 在中间表给用户添加角色集合
     * @param userBean  用户对象
     */
    void  addUser(UserBean userBean,Integer[] roleIds);

    /**
     * 删除用户
     * 先删除中间表该用户的权限，再删除用户
     * @param userId    用户id
     */
    void delUser(Integer userId);

    /**
     * 查询用户
     * 同时查询该用户拥有的角色集合（打✅）、权限集合（列出集合）
     * @param userId    用户id
     * @return  用户对象
     */
    UserBean findByUserId(Integer userId);


    /**
     * 修改用户角色
     * 上面有方法能查到用户的权限和角色
     * 先通过用户id删除中间表相关信息，再添加新的角色信息
     * @param userId    用户id
     * @param roleIds   用户角色id数组
     */
    void updateRoleByUserId(Integer userId,Integer[] roleIds);


    /**
     * 修改密码
     * @param userId    当前登录用户id
     * @param newPassword   新密码
     */
    void updatePwd(Integer userId,String newPassword);

}
